/*------------------------------------------------------
                hou_elearningGEN beta v1.0
Author: xtrung.net@gmail.com
Write On: 04/27/2008
Create On:4/13/2012 11:22:20 AM
------------------------------------------------------*/
using hou_elearning.Entity;
using hou_elearning.DataAccess;
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text;
namespace hou_elearning.Business
{
    public class Chucnang_TacvuBRL
    {
        #region Init
        private static string EX_NOT_EXIST="Không Tồn Tại Chucnang_Tacvu Này";
		private static string EX_FK_ICHUCNANGID_INVALID="FK_iChucnangID không hợp lệ";
		private static string EX_FK_ITACVUID_INVALID="FK_iTacvuID không hợp lệ";
		private static string EX_SGHICHU_EMPTY="sGhichu không được để trống";
		private static string EX_ID_INVALID="PK_iChucnang_TacvuID không hợp lệ";
        #endregion
        #region Public Methods
        /// <summary>
        /// Get Chucnang_Tacvu Theo ID
        /// </summary>
        /// <param name="PK_iChucnang_TacvuID">Int64:Chucnang_Tacvu ID</param>
        /// <returns>Chucnang_TacvuEntity</returns>        
        public static Chucnang_TacvuEntity GetOne(Int64 PK_iChucnang_TacvuID)
        {
            
			if(PK_iChucnang_TacvuID<=0)
				throw new Exception(EX_ID_INVALID);
            return Chucnang_TacvuDAL.GetOne(PK_iChucnang_TacvuID);
        }
        /// <summary>
        /// Lấy về List các Chucnang_Tacvu
        /// </summary>
        /// <returns>List Chucnang_TacvuEntity:List Chucnang_Tacvu Cần lấy</returns>
        public static List<Chucnang_TacvuEntity> GetAll()
        {
            return Chucnang_TacvuDAL.GetAll();
        }
        public static List<Chucnang_TacvuEntity> GetByFK_iChucnangID(Int32 FK_iChucnangID)
		{
			if(FK_iChucnangID<=0)
				throw new Exception(EX_FK_ICHUCNANGID_INVALID);
			return Chucnang_TacvuDAL.GetByFK_iChucnangID(FK_iChucnangID);
		}public static List<Chucnang_TacvuEntity> GetByFK_iTacvuID(Int32 FK_iTacvuID)
		{
			if(FK_iTacvuID<=0)
				throw new Exception(EX_FK_ITACVUID_INVALID);
			return Chucnang_TacvuDAL.GetByFK_iTacvuID(FK_iTacvuID);
		}
        /// <summary>
        /// Kiểm tra và thêm mới Chucnang_Tacvu
        /// </summary>
        /// <param name="entity">Entity</param>
        /// <returns>Int32: ID của Chucnang_Tacvu Mới Thêm Vào</returns>
        public static Int32 Add(Chucnang_TacvuEntity entity)
        {
            checkLogic(entity);
            checkDuplicate(entity, false);
            checkFK(entity);
            return Chucnang_TacvuDAL.Add(entity);
        }
        /// <summary>
        /// Kiểm tra và chỉnh sửa Chucnang_Tacvu
        /// </summary>
        /// <param name="entity">Chucnang_TacvuEntity</param>
        /// <returns>bool:kết quả thực hiện</returns>
        public static bool Edit(Chucnang_TacvuEntity entity)
        {
            checkExist(entity.PK_iChucnang_TacvuID);
            checkLogic(entity);
            checkDuplicate(entity, true);
            checkFK(entity);
            return Chucnang_TacvuDAL.Edit(entity);
        }
        /// <summary>
        /// Kiểm tra và xoá Chucnang_Tacvu
        /// </summary>
        /// <param name="PK_iChucnang_TacvuID">Int64 : PK_iChucnang_TacvuID</param>
        /// <returns>bool:kết quả thực hiện</returns>
        public static bool Remove(Int64 PK_iChucnang_TacvuID)
        {
            checkExist(PK_iChucnang_TacvuID);
            return Chucnang_TacvuDAL.Remove(PK_iChucnang_TacvuID);
        }
        #endregion
        #region Private Methods
        private static void checkExist(Int64 PK_iChucnang_TacvuID)
        {
            Chucnang_TacvuEntity oChucnang_Tacvu=Chucnang_TacvuDAL.GetOne(PK_iChucnang_TacvuID);
            if(oChucnang_Tacvu==null)
                throw new Exception(EX_NOT_EXIST);
        }
        /// <summary>
        /// Kiểm tra logic Entity
        /// </summary>
        /// <param name="entity">Chucnang_TacvuEntity: entity</param>
        private static void checkLogic(Chucnang_TacvuEntity entity)
        {   
			if (entity.FK_iChucnangID < 0)
				throw new Exception(EX_FK_ICHUCNANGID_INVALID);
			if (entity.FK_iTacvuID < 0)
				throw new Exception(EX_FK_ITACVUID_INVALID);
			if (String.IsNullOrEmpty(entity.sGhichu))
				throw new Exception(EX_SGHICHU_EMPTY);
        }
        /// <summary>
        /// Kiểm tra trùng lặp bản ghi
        /// </summary>
        /// <param name="entity">Chucnang_TacvuEntity: Chucnang_TacvuEntity</param>
        private static void checkDuplicate(Chucnang_TacvuEntity entity,bool checkPK)
        {
            /* 
            Example
            List<Chucnang_TacvuEntity> list = Chucnang_TacvuDAL.GetAll();
            if (list.Exists(
                delegate(Chucnang_TacvuEntity oldEntity)
                {
                    bool result =oldEntity.FIELD.Equals(entity.FIELD, StringComparison.OrdinalIgnoreCase);
                    if(checkPK)
                        result=result && oldEntity.PK_iChucnang_TacvuID != entity.PK_iChucnang_TacvuID;
                    return result;
                }
            ))
            {
                list.Clear();
                throw new Exception(EX_FIELD_EXISTED);
            }
            */
        }
        /// <summary>
        /// Kiểm tra tồn tại khóa ngoại
        /// </summary>
        /// <param name="entity">Chucnang_TacvuEntity:entity</param>
        private static void checkFK(Chucnang_TacvuEntity entity)
        {            
			ChucnangEntity oChucnang = ChucnangDAL.GetOne(entity.FK_iChucnangID);
			if (oChucnang==null)
			{
				throw new Exception("Không tìm thấy :FK_iChucnangID");
			}
			TacvuEntity oTacvu = TacvuDAL.GetOne(entity.FK_iTacvuID);
			if (oTacvu==null)
			{
				throw new Exception("Không tìm thấy :FK_iTacvuID");
			}
        }
        #endregion
    }
}
